package robot.io.infos;

import robot.IRobot;

import environnement.Environnement;
import java.util.List;

/**
 * Class VitesseMoyenne
 * Calcul la vitesse moyenne du robot
 */
public class VitesseMoyenne implements IInfos
{

    //
    // Fields
    //
    private double moyenne = 0;
    /**
     * Liste des distances parcouru à chaque tour
     */
    private double distance;
    /**
     * Vitesse moyenne (en cases)
     */
    private int nb_tours;
    /**
     * derniers coordnonnées
     */
    private int x;
    private int y;

    //
    //Constructors
    //
    /**
     * Constructeur
     */
    public VitesseMoyenne()
    {
        this.distance = 0;
        this.nb_tours = 0;
        this.x = -1;
        this.y = -1;
    }

    //
    // Methods
    //
    //
    // Accessor methods
    //
    /**
     * Retourne la vitesse moyenne
     */
    @Override
    public double getValeur()
    {
        return this.moyenne;
    }

    /**
     * Modifie la valeur du capteur
     */
    @Override
    public void setValeur(double valeur)
    {
        this.moyenne = valeur;
    }

    //
    // Other methods
    //
    /**
     * Met à jour la vitesse moyenne du robot
     * @param        robot Robot
     * @param        env Environnement global
     */
    public void miseAJourInfo(IRobot robot)
    {
        double vitMoy = 0;

        ++this.nb_tours;
        if (this.x < 0 || this.y < 0)
        {//Cas de la première mise à jour
            this.x = robot.getX();
            this.y = robot.getY();
            this.distance = 0;
        }
        else
        {//Autres cas
            this.distance += Math.sqrt(Math.pow(this.x - robot.getX(), 2) + Math.pow(this.y - robot.getY(), 2));
        }

        if (this.nb_tours != 0)
        {
            vitMoy = this.distance / (double) this.nb_tours;
        }

        this.moyenne = vitMoy;

    }

    public List<Double> getAlScore()
    {
        return null;
    }
}
